<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // Generator 生成器
      // function* g() {
      //   yield '钱'
      //   yield '多'
      //   return '多'
      // }
      // const a = g()
      // console.log(a)

      // // generator 要靠next() 进行执行
      // console.log(a.next())
      // console.log(a.next())
      // console.log(a.next())
      // console.log(a.next())

      // // 遍历
      // for (let item of g()) {
      //   console.log(item)
      // }

      // next() 方法传参

      // function* f(a) {
      //   const b = 2 * (yield a - 1)
      //   const c = yield b / 4
      //   return a - b + c
      // }

      // const o = f(3)
      // console.log(o)
      // console.log(o.next(1)) // {value:2,done:false}
      // console.log(o.next(3)) //{value:1.5,done:false}
      // console.log(o.next(4)) // {value:1,done:false}

      // yield* 表达式语法
      // g1() 返回的是生成器
      // function* g1() {
      //   yield '冰'
      //   yield '墩'
      //   yield '墩'
      // }

      // // // 在y1 中调用g1
      // function* y1() {
      //   yield '雪'
      //   for (let item of g1()) {
      //     // yield item
      //     console.log(item)
      //   }
      //   yield* g1()
      //   // yield g1() // 返回生成器
      //   yield '容'
      //   yield '容'
      // }

      // for (let k of y1()) {
      //   console.log(k)
      // }

      // 使用generator 每间隔1s输出 1 2 3 4 5

      // let getDataOne = (i) => {
      //   setTimeout(function () {
      //     // 调用Generator并传递数据
      //     console.log(i)
      //     generator.next()
      //   }, 1000)
      // }
      // function* main() {
      //   for (let i = 1; i <= 5; i++) {
      //     yield getDataOne(i)
      //   }
      // }
      // // 创建一个Generator实例
      // generator = main()
      // generator.next()

      //使用promise.then 的方法
      // new Promise((resolve, rejecte) => {
      //   setTimeout(() => {
      //     console.log(1)
      //     resolve(1)
      //   }, 1000)
      // })
      //   .then((re) => {
      //     return new Promise((resolve, rejecte) => {
      //       setTimeout(() => {
      //         console.log(2)
      //         resolve()
      //       }, 1000)
      //     })
      //   })
      //   .then((re) => {
      //     setTimeout(() => {
      //       console.log(3)
      //     }, 1000)
      //   })

      // 异步任务的封装---promise 结合generator
      // function timer() {
      //   return new Promise((resolve, rejecte) => {
      //     setTimeout(() => {
      //       const data = 12
      //       resolve(data)
      //     }, 1000)
      //   })
      // }

      // function* gen() {
      //   yield timer() // {value:promise,done:false}
      // }

      // const a = gen()
      // a.next().value.then((re) => {
      //   console.log(re)
      // })
    </script>
  </body>
</html>
